/**
 * 解构赋值
 */

 /**
  * 1、数组的方式
  */

let [a1,b1,...c1] = [1,2,3,4]
// console.log(a1) // 1
// console.log(b1) // 2
// console.log(c1) // [3,4]

let arr1 = [1,2,3,4]
function demo1(...rest) {
    console.log(rest) // [[1,2,3,4]]
    console.log(...rest) // [1,2,3,4]
    console.log([...rest]) // [[1,2,3,4]]
}
demo1(arr1)


/**
 * 2、对象的方式
 * 
 */
let o = { a2: 10, q: 30, w:50 }
let { a2: my, b2=3, ...rest } = o;
// console.log(a2) // 10, 注意，当用了别名，就不能用它
console.log(my) // 10
console.log(b2) // 3
console.log(rest) // { q: 30, w:50 }

function demo2(...rest) {
    console.log(rest) // [ { a2: 10, q: 30, w: 50 } ]
}
 demo2(o)

/**
 * 扩展运算符
 * 可以进行数组和对象的合并，数组的追加
 * 还有可以将伪数组转化成真正的数组
 */

 /** 
  * 数组
  */

let arr2 = [1,2,3]
let arr3 = [4,5,6]
let arr4 = [...arr2, arr3]
let arr5 = [...arr2, ...arr3]
let arr6 = [];
arr6.push(...arr2)
console.log(arr4) // [ 1, 2, 3, [ 4, 5, 6 ] ]
console.log(arr5) // [ 1, 2, 3, 4, 5, 6 ]
console.log(arr6) // [ 1, 2, 3 ]

/**
 * 对象
 */

 let o2 = {
     a: 1,
     b: 2
 }
 let o3 = {
     b:3,
     d: 3
 }
 let o4 = {...o2, o3}
 let o5 = {...o2, ...o3}
 console.log(o4) // { a: 1, b: 2, o3: { b: 3, d: 3 } }
 console.log(o5) // { a: 1, b: 3, d: 3 }